package com.qf.shopping.dao.impl;

import com.qf.shopping.dao.IProductDao;
import com.qf.shopping.entity.Product;
import com.qf.shopping.utils.Tools;

import java.util.List;

/**商品的数据访问层
 * @author 三旬
 * @version 1.0  2022/9/18
 */

public class ProductDaoImpl implements IProductDao {
    /**
     * 添加一个新的商品
     * @param p
     * @return
     */
    @Override
    public Integer insert(Product p) {
        String sql = "insert into t_product(id ,name,des,price,type1,type2,statu,create_time,stock,png_url)  values(default,?,?,?,?,?,0,now(),?,?)";
        return Tools.update(sql,p.getName(),p.getDes(),p.getPrice(),p.getType1(),p.getType2(),p.getStock(),p.getPngUrl());
    }

    /**
     * 删除该商品
     * @param id
     * @return
     */
    @Override
    public Integer deleteById(Integer id) {
        String sql = "delete from t_product  where id = ?";
        return Tools.update(sql,id);
    }

    /**
     * 修改商品的信息
     * @param p
     * @return
     */
    @Override
    public Integer updateById(Product p) {
        String sql = "update t_product  set name = ?,des = ?, price = ?, type1 = ?, type2 = ?, statu = ?,stock = ?, png_url = ? where id = ?";
        return Tools.update(sql,p.getName(),p.getDes(),p.getPrice(),p.getType1(),p.getType2(),p.getStatu(),p.getStock(),p.getPngUrl(),p.getId());
    }

    /**
     * 搜索单个商品(通常用于添加，需要获得父类)
     * @param id
     * @return
     */
    @Override
    public Product selectOneById(Integer id) {
        String sql = "select * from t_product where id = ?";
        return Tools.selectOne(sql, Product.class,id);
    }

    /**
     * 搜索显示所有商品（上架，下架，录入）
     * @return
     */
    @Override
    public List<Product> selectAll() {
        String sql = "select * from t_product";
        return Tools.selectList(sql,Product.class);
    }

    /**
     * 搜索显示所有商品
     * @param index
     * @param size
     * @return
     */
    @Override
    public List<Product> selectPage(Integer index, Integer size) {
        String sql =  "SELECT p.*, t1.NAME AS type1Name, t2.NAME AS type2Name " +
                "FROM t_product p " +
                "LEFT JOIN t_product_type t1 ON (p.type1 = t1.id) " +
                "LEFT JOIN t_product_type t2 ON (p.type2 = t2.id) " +
                "limit ?,?";
        return Tools.selectList(sql,Product.class,index,size);
    }
    /**
     * 获得所有商品的数量
     * @return
     */
    @Override
    public Integer counts() {
        return selectAll().size();
    }

    /**
     * 根据商品状态，获得该商品状态的数量
     * @param statu
     * @return
     */
    @Override
    public Integer counts(Integer statu) {
        String sql = "select * from t_product where statu = ?";
        return Tools.selectList(sql,Product.class,statu).size();
    }

    /**
     * 修改商品的信息（图片不变）
     * @param p
     * @return
     */
    @Override
    public Integer updateNoPngById(Product p) {
        String sql = "update t_product  set name = ?,des = ?, price = ?, type1 = ?, type2 = ?, statu = ?,stock = ?  where id = ?";
        return Tools.update(sql,p.getName(),p.getDes(),p.getPrice(),p.getType1(),p.getType2(),p.getStatu(),p.getStock(),p.getId());
    }

    /**
     * 搜索所有上架的商品
     * @return
     */
    @Override
    public List<Product> selectProductByStatu() {
        String sql = "select * from t_product where statu = 1 ";
        return Tools.selectList(sql,Product.class);
    }

}
